package com.yunxin.core.utils.infra.utils;


import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class AreasCheckUtil {


    private static Set<String> citys = new HashSet<>();

    static {

        citys.add("石家庄市");
        citys.add("唐山市");
        citys.add("秦皇岛市");
        citys.add("邯郸市");
        citys.add("邢台市");
        citys.add("保定市");
        citys.add("张家口市");
        citys.add("承德市");
        citys.add("沧州市");
        citys.add("廊坊市");
        citys.add("衡水市");
        citys.add("太原市");
        citys.add("大同市");
        citys.add("阳泉市");
        citys.add("长治市");
        citys.add("晋城市");
        citys.add("朔州市");
        citys.add("晋中市");
        citys.add("运城市");
        citys.add("忻州市");
        citys.add("临汾市");
        citys.add("吕梁市");
        citys.add("呼和浩特市");
        citys.add("包头市");
        citys.add("乌海市");
        citys.add("赤峰市");
        citys.add("通辽市");
        citys.add("鄂尔多斯市");
        citys.add("呼伦贝尔市");
        citys.add("巴彦淖尔市");
        citys.add("乌兰察布市");
        citys.add("兴安盟");
        citys.add("锡林郭勒盟");
        citys.add("阿拉善盟");
        citys.add("沈阳市");
        citys.add("大连市");
        citys.add("鞍山市");
        citys.add("抚顺市");
        citys.add("本溪市");
        citys.add("丹东市");
        citys.add("锦州市");
        citys.add("营口市");
        citys.add("阜新市");
        citys.add("辽阳市");
        citys.add("盘锦市");
        citys.add("铁岭市");
        citys.add("朝阳市");
        citys.add("葫芦岛市");
        citys.add("长春市");
        citys.add("吉林市");
        citys.add("四平市");
        citys.add("辽源市");
        citys.add("通化市");
        citys.add("白山市");
        citys.add("松原市");
        citys.add("白城市");
        citys.add("延边朝鲜族自治州");
        citys.add("哈尔滨市");
        citys.add("齐齐哈尔市");
        citys.add("鸡西市");
        citys.add("鹤岗市");
        citys.add("双鸭山市");
        citys.add("大庆市");
        citys.add("伊春市");
        citys.add("佳木斯市");
        citys.add("七台河市");
        citys.add("牡丹江市");
        citys.add("黑河市");
        citys.add("绥化市");
        citys.add("大兴安岭地区");
        citys.add("南京市");
        citys.add("无锡市");
        citys.add("徐州市");
        citys.add("常州市");
        citys.add("苏州市");
        citys.add("南通市");
        citys.add("连云港市");
        citys.add("淮安市");
        citys.add("盐城市");
        citys.add("扬州市");
        citys.add("镇江市");
        citys.add("泰州市");
        citys.add("宿迁市");
        citys.add("杭州市");
        citys.add("宁波市");
        citys.add("温州市");
        citys.add("嘉兴市");
        citys.add("湖州市");
        citys.add("绍兴市");
        citys.add("金华市");
        citys.add("衢州市");
        citys.add("舟山市");
        citys.add("台州市");
        citys.add("丽水市");
        citys.add("合肥市");
        citys.add("芜湖市");
        citys.add("蚌埠市");
        citys.add("淮南市");
        citys.add("马鞍山市");
        citys.add("淮北市");
        citys.add("铜陵市");
        citys.add("安庆市");
        citys.add("黄山市");
        citys.add("滁州市");
        citys.add("阜阳市");
        citys.add("宿州市");
        citys.add("六安市");
        citys.add("亳州市");
        citys.add("池州市");
        citys.add("宣城市");
        citys.add("福州市");
        citys.add("厦门市");
        citys.add("莆田市");
        citys.add("三明市");
        citys.add("泉州市");
        citys.add("漳州市");
        citys.add("南平市");
        citys.add("龙岩市");
        citys.add("宁德市");
        citys.add("南昌市");
        citys.add("景德镇市");
        citys.add("萍乡市");
        citys.add("九江市");
        citys.add("新余市");
        citys.add("鹰潭市");
        citys.add("赣州市");
        citys.add("吉安市");
        citys.add("宜春市");
        citys.add("抚州市");
        citys.add("上饶市");
        citys.add("济南市");
        citys.add("青岛市");
        citys.add("淄博市");
        citys.add("枣庄市");
        citys.add("东营市");
        citys.add("烟台市");
        citys.add("潍坊市");
        citys.add("济宁市");
        citys.add("泰安市");
        citys.add("威海市");
        citys.add("日照市");
        citys.add("临沂市");
        citys.add("德州市");
        citys.add("聊城市");
        citys.add("滨州市");
        citys.add("菏泽市");
        citys.add("郑州市");
        citys.add("开封市");
        citys.add("洛阳市");
        citys.add("平顶山市");
        citys.add("安阳市");
        citys.add("鹤壁市");
        citys.add("新乡市");
        citys.add("焦作市");
        citys.add("濮阳市");
        citys.add("许昌市");
        citys.add("漯河市");
        citys.add("三门峡市");
        citys.add("南阳市");
        citys.add("商丘市");
        citys.add("信阳市");
        citys.add("周口市");
        citys.add("驻马店市");
        citys.add("武汉市");
        citys.add("黄石市");
        citys.add("十堰市");
        citys.add("宜昌市");
        citys.add("襄阳市");
        citys.add("鄂州市");
        citys.add("荆门市");
        citys.add("孝感市");
        citys.add("荆州市");
        citys.add("黄冈市");
        citys.add("咸宁市");
        citys.add("随州市");
        citys.add("恩施土家族苗族自治州");
        citys.add("长沙市");
        citys.add("株洲市");
        citys.add("湘潭市");
        citys.add("衡阳市");
        citys.add("邵阳市");
        citys.add("岳阳市");
        citys.add("常德市");
        citys.add("张家界市");
        citys.add("益阳市");
        citys.add("郴州市");
        citys.add("永州市");
        citys.add("怀化市");
        citys.add("娄底市");
        citys.add("湘西土家族苗族自治州");
        citys.add("广州市");
        citys.add("韶关市");
        citys.add("深圳市");
        citys.add("珠海市");
        citys.add("汕头市");
        citys.add("佛山市");
        citys.add("江门市");
        citys.add("湛江市");
        citys.add("茂名市");
        citys.add("肇庆市");
        citys.add("惠州市");
        citys.add("梅州市");
        citys.add("汕尾市");
        citys.add("河源市");
        citys.add("阳江市");
        citys.add("清远市");
        citys.add("东莞市");
        citys.add("中山市");
        citys.add("潮州市");
        citys.add("揭阳市");
        citys.add("云浮市");
        citys.add("南宁市");
        citys.add("柳州市");
        citys.add("桂林市");
        citys.add("梧州市");
        citys.add("北海市");
        citys.add("防城港市");
        citys.add("钦州市");
        citys.add("贵港市");
        citys.add("玉林市");
        citys.add("百色市");
        citys.add("贺州市");
        citys.add("河池市");
        citys.add("来宾市");
        citys.add("崇左市");
        citys.add("海口市");
        citys.add("三亚市");
        citys.add("三沙市");
        citys.add("儋州市");
        citys.add("成都市");
        citys.add("自贡市");
        citys.add("攀枝花市");
        citys.add("泸州市");
        citys.add("德阳市");
        citys.add("绵阳市");
        citys.add("广元市");
        citys.add("遂宁市");
        citys.add("内江市");
        citys.add("乐山市");
        citys.add("南充市");
        citys.add("眉山市");
        citys.add("宜宾市");
        citys.add("广安市");
        citys.add("达州市");
        citys.add("雅安市");
        citys.add("巴中市");
        citys.add("资阳市");
        citys.add("阿坝藏族羌族自治州");
        citys.add("甘孜藏族自治州");
        citys.add("凉山彝族自治州");
        citys.add("贵阳市");
        citys.add("六盘水市");
        citys.add("遵义市");
        citys.add("安顺市");
        citys.add("毕节市");
        citys.add("铜仁市");
        citys.add("黔西南布依族苗族自治州");
        citys.add("黔东南苗族侗族自治州");
        citys.add("黔南布依族苗族自治州");
        citys.add("昆明市");
        citys.add("曲靖市");
        citys.add("玉溪市");
        citys.add("保山市");
        citys.add("昭通市");
        citys.add("丽江市");
        citys.add("普洱市");
        citys.add("临沧市");
        citys.add("楚雄彝族自治州");
        citys.add("红河哈尼族彝族自治州");
        citys.add("文山壮族苗族自治州");
        citys.add("西双版纳傣族自治州");
        citys.add("大理白族自治州");
        citys.add("德宏傣族景颇族自治州");
        citys.add("怒江傈僳族自治州");
        citys.add("迪庆藏族自治州");
        citys.add("拉萨市");
        citys.add("日喀则市");
        citys.add("昌都市");
        citys.add("林芝市");
        citys.add("山南市");
        citys.add("那曲市");
        citys.add("阿里地区");
        citys.add("西安市");
        citys.add("铜川市");
        citys.add("宝鸡市");
        citys.add("咸阳市");
        citys.add("渭南市");
        citys.add("延安市");
        citys.add("汉中市");
        citys.add("榆林市");
        citys.add("安康市");
        citys.add("商洛市");
        citys.add("兰州市");
        citys.add("嘉峪关市");
        citys.add("金昌市");
        citys.add("白银市");
        citys.add("天水市");
        citys.add("武威市");
        citys.add("张掖市");
        citys.add("平凉市");
        citys.add("酒泉市");
        citys.add("庆阳市");
        citys.add("定西市");
        citys.add("陇南市");
        citys.add("临夏回族自治州");
        citys.add("甘南藏族自治州");
        citys.add("西宁市");
        citys.add("海东市");
        citys.add("海北藏族自治州");
        citys.add("黄南藏族自治州");
        citys.add("海南藏族自治州");
        citys.add("果洛藏族自治州");
        citys.add("玉树藏族自治州");
        citys.add("海西蒙古族藏族自治州");
        citys.add("银川市");
        citys.add("石嘴山市");
        citys.add("吴忠市");
        citys.add("固原市");
        citys.add("中卫市");
        citys.add("乌鲁木齐市");
        citys.add("克拉玛依市");
        citys.add("吐鲁番市");
        citys.add("哈密市");
        citys.add("昌吉回族自治州");
        citys.add("博尔塔拉蒙古自治州");
        citys.add("巴音郭楞蒙古自治州");
        citys.add("阿克苏地区");
        citys.add("克孜勒苏柯尔克孜自治州");
        citys.add("喀什地区");
        citys.add("和田地区");
        citys.add("伊犁哈萨克自治州");
        citys.add("塔城地区");
        citys.add("阿勒泰地区");
        citys.add("东城区");
        citys.add("西城区");
        citys.add("朝阳区");
        citys.add("丰台区");
        citys.add("石景山区");
        citys.add("海淀区");
        citys.add("门头沟区");
        citys.add("房山区");
        citys.add("通州区");
        citys.add("顺义区");
        citys.add("昌平区");
        citys.add("大兴区");
        citys.add("怀柔区");
        citys.add("平谷区");
        citys.add("密云区");
        citys.add("延庆区");
        citys.add("和平区");
        citys.add("河东区");
        citys.add("河西区");
        citys.add("南开区");
        citys.add("河北区");
        citys.add("红桥区");
        citys.add("东丽区");
        citys.add("西青区");
        citys.add("津南区");
        citys.add("北辰区");
        citys.add("武清区");
        citys.add("宝坻区");
        citys.add("滨海新区");
        citys.add("宁河区");
        citys.add("静海区");
        citys.add("蓟州区");
        citys.add("黄浦区");
        citys.add("徐汇区");
        citys.add("长宁区");
        citys.add("静安区");
        citys.add("普陀区");
        citys.add("虹口区");
        citys.add("杨浦区");
        citys.add("闵行区");
        citys.add("宝山区");
        citys.add("嘉定区");
        citys.add("浦东新区");
        citys.add("金山区");
        citys.add("松江区");
        citys.add("青浦区");
        citys.add("奉贤区");
        citys.add("崇明区");
        citys.add("济源市");
        citys.add("仙桃市");
        citys.add("潜江市");
        citys.add("天门市");
        citys.add("神农架林区");
        citys.add("五指山市");
        citys.add("琼海市");
        citys.add("文昌市");
        citys.add("万宁市");
        citys.add("东方市");
        citys.add("定安县");
        citys.add("屯昌县");
        citys.add("澄迈县");
        citys.add("临高县");
        citys.add("白沙黎族自治县");
        citys.add("昌江黎族自治县");
        citys.add("乐东黎族自治县");
        citys.add("陵水黎族自治县");
        citys.add("保亭黎族苗族自治县");
        citys.add("琼中黎族苗族自治县");
        citys.add("万州区");
        citys.add("涪陵区");
        citys.add("渝中区");
        citys.add("大渡口区");
        citys.add("江北区");
        citys.add("沙坪坝区");
        citys.add("九龙坡区");
        citys.add("南岸区");
        citys.add("北碚区");
        citys.add("綦江区");
        citys.add("大足区");
        citys.add("渝北区");
        citys.add("巴南区");
        citys.add("黔江区");
        citys.add("长寿区");
        citys.add("江津区");
        citys.add("合川区");
        citys.add("永川区");
        citys.add("南川区");
        citys.add("璧山区");
        citys.add("铜梁区");
        citys.add("潼南区");
        citys.add("荣昌区");
        citys.add("开州区");
        citys.add("梁平区");
        citys.add("武隆区");
        citys.add("城口县");
        citys.add("丰都县");
        citys.add("垫江县");
        citys.add("忠县");
        citys.add("云阳县");
        citys.add("奉节县");
        citys.add("巫山县");
        citys.add("巫溪县");
        citys.add("石柱土家族自治县");
        citys.add("秀山土家族苗族自治县");
        citys.add("酉阳土家族苗族自治县");
        citys.add("彭水苗族土家族自治县");
        citys.add("甘肃中牧山丹马场");
        citys.add("莲花山风景林自然保护区");
        citys.add("太子山天然林保护区");
        citys.add("石河子市");
        citys.add("阿拉尔市");
        citys.add("图木舒克市");
        citys.add("五家渠市");
        citys.add("北屯市");
        citys.add("铁门关市");
        citys.add("双河市");
        citys.add("可克达拉市");
        citys.add("昆玉市");
        citys.add("胡杨河市");
        citys.add("澎湖县");
        citys.add("屏东县");
        citys.add("新北市");
        citys.add("台东县");
        citys.add("台南市");
        citys.add("台中市");
        citys.add("桃园市");
        citys.add("新竹市");
        citys.add("新竹县");
        citys.add("宜兰县");
        citys.add("云林县");
        citys.add("彰化县");
        citys.add("高雄市");
        citys.add("花莲县");
        citys.add("基隆市");
        citys.add("嘉义市");
        citys.add("嘉义县");
        citys.add("苗栗县");
        citys.add("南投县");
        citys.add("台北市");
        citys.add("中西区");
        citys.add("东区");
        citys.add("九龙城区");
        citys.add("观塘区");
        citys.add("南区");
        citys.add("深水埗区");
        citys.add("湾仔区");
        citys.add("黄大仙区");
        citys.add("油尖旺区");
        citys.add("离岛区");
        citys.add("葵青区");
        citys.add("北区");
        citys.add("西贡区");
        citys.add("沙田区");
        citys.add("屯门区");
        citys.add("大埔区");
        citys.add("荃湾区");
        citys.add("元朗区");

    }


    private static String checkAndCover(String city, boolean u) {

        if (StrUtil.isEmpty(city)) {
            return StrUtil.EMPTY;
        }

        city = city.trim();

        if (citys.contains(city)) {
            return city;
        }


        //,陕西省,汉中市
        if (city.startsWith(",") || city.startsWith("-") || city.startsWith("，") || city.startsWith("_")) {
            city = city.substring(1);
        }

        //陕西省,汉中市
        if (city.contains(",")) {
            String[] split = city.split(",");
            if (split.length != 2) {
                return StrUtil.EMPTY;
            }

            if (StrUtil.isBlank(split[1])) {
                return StrUtil.EMPTY;
            }

            if (citys.contains(split[1])) {
                return split[1];
            }

            String s = zxsToQu(split[1]);
            if (StrUtil.isNotEmpty(s)) {
                return s;
            }

            return StrUtil.EMPTY;
        }

        //河南省-省直辖县级行政区划
        if (city.contains("-")) {
            String[] split = city.split("-");
            if (split.length != 2) {
                return StrUtil.EMPTY;
            }
            if (StrUtil.isBlank(split[1])) {
                return StrUtil.EMPTY;
            }
            if (citys.contains(split[1])) {
                return split[1];
            }

            String s = zxsToQu(split[1]);
            if (StrUtil.isNotEmpty(s)) {
                return s;
            }

            return StrUtil.EMPTY;
        }
        //栈溢出
        if (u) {
            String s = zxsToQu(city);
            if (StrUtil.isNotEmpty(s)) {
                return s;
            }
        }
        return StrUtil.EMPTY;
    }

    public static String checkAndCover(String city) {
        return checkAndCover(city, true);
    }


    public static Set<String> beijing = new HashSet<>();
    public static Set<String> tianjing = new HashSet<>();
    public static Set<String> shanghai = new HashSet<>();
    public static Set<String> chongqing = new HashSet<>();

    static {
        beijing.add("东城区");
        beijing.add("西城区");
        beijing.add("朝阳区");
        beijing.add("丰台区");
        beijing.add("石景山区");
        beijing.add("海淀区");
        beijing.add("门头沟区");
        beijing.add("房山区");
        beijing.add("通州区");
        beijing.add("顺义区");
        beijing.add("昌平区");
        beijing.add("大兴区");
        beijing.add("怀柔区");
        beijing.add("平谷区");
        beijing.add("密云区");
        beijing.add("延庆区");

        tianjing.add("和平区");
        tianjing.add("河东区");
        tianjing.add("河西区");
        tianjing.add("南开区");
        tianjing.add("河北区");
        tianjing.add("红桥区");
        tianjing.add("东丽区");
        tianjing.add("西青区");
        tianjing.add("津南区");
        tianjing.add("北辰区");
        tianjing.add("武清区");
        tianjing.add("宝坻区");
        tianjing.add("滨海新区");
        tianjing.add("宁河区");
        tianjing.add("静海区");
        tianjing.add("蓟州区");


        shanghai.add("黄浦区");
        shanghai.add("徐汇区");
        shanghai.add("长宁区");
        shanghai.add("静安区");
        shanghai.add("普陀区");
        shanghai.add("虹口区");
        shanghai.add("杨浦区");
        shanghai.add("闵行区");
        shanghai.add("宝山区");
        shanghai.add("嘉定区");
        shanghai.add("浦东新区");
        shanghai.add("金山区");
        shanghai.add("松江区");
        shanghai.add("青浦区");
        shanghai.add("奉贤区");
        shanghai.add("崇明区");


        chongqing.add("万州区");
        chongqing.add("涪陵区");
        chongqing.add("渝中区");
        chongqing.add("大渡口区");
        chongqing.add("江北区");
        chongqing.add("沙坪坝区");
        chongqing.add("九龙坡区");
        chongqing.add("南岸区");
        chongqing.add("北碚区");
        chongqing.add("綦江区");
        chongqing.add("大足区");
        chongqing.add("渝北区");
        chongqing.add("巴南区");
        chongqing.add("黔江区");
        chongqing.add("长寿区");
        chongqing.add("江津区");
        chongqing.add("合川区");
        chongqing.add("永川区");
        chongqing.add("南川区");
        chongqing.add("璧山区");
        chongqing.add("铜梁区");
        chongqing.add("潼南区");
        chongqing.add("荣昌区");
        chongqing.add("开州区");
        chongqing.add("梁平区");
        chongqing.add("武隆区");
        chongqing.add("城口县");
        chongqing.add("丰都县");
        chongqing.add("垫江县");
        chongqing.add("忠县");
        chongqing.add("云阳县");
        chongqing.add("奉节县");
        chongqing.add("巫山县");
        chongqing.add("巫溪县");
        chongqing.add("石柱土家族自治县");
        chongqing.add("秀山土家族苗族自治县");
        chongqing.add("酉阳土家族苗族自治县");
        chongqing.add("彭水苗族土家族自治县");


    }


    /**
     * 区转为直辖市
     *
     * @param city
     * @return  如果传入名称不正确 会尝试转一次正确的名称 在尝试转化直辖市 就会返回空字符串
     */
    public static String cityToZXS(String city) {


        if (StrUtil.isBlank(city)) {
            return StrUtil.EMPTY;
        }
        city = city.trim();

        String c1 = _cityToZXS(city);

        if (StrUtil.isEmpty(c1)) {
            String s = checkAndCover(city);
            String c2 = _cityToZXS(s);
            return c2;
        }
        return c1;
    }

    /**
     * 区转为直辖市
     * @param city
     * @return
     */
    private static String _cityToZXS(String city) {
        if (StrUtil.isEmpty(city)) {
            return StrUtil.EMPTY;
        }

        city = city.trim();

        if (beijing.contains(city)) {
            return "北京市";
        }

        if (shanghai.contains(city)) {
            return "上海市";
        }

        if (tianjing.contains(city)) {
            return "天津市";
        }

        if (chongqing.contains(city)) {
            return "重庆市";
        }
        return StrUtil.EMPTY;
    }


    private static String zxsToQu(String city,boolean u) {

        if (StrUtil.isEmpty(city)) {
            return StrUtil.EMPTY;
        }

        city = city.trim();

        List<String> cityList = new ArrayList<>();
        if ("北京市".equals(city) ) {
            cityList = new ArrayList<>(beijing);
        }

        if ("上海市".equals(city)) {
            cityList = new ArrayList<>(shanghai);
        }

        if ("天津市".equals(city)) {
            cityList = new ArrayList<>(tianjing);
        }

        if ("重庆市".equals(city)) {
            cityList = new ArrayList<>(chongqing);
        }

        if (CollUtil.isNotEmpty(cityList)) {
            int i = RandomUtil.randomInt(0, cityList.size());
            return cityList.get(i);
        }


        //本身是区
        String s = _cityToZXS(city);
        if (StrUtil.isNotEmpty(s)) {
            return city;
        }

        if (u) {
            //        //尝试转化一下
            String s1 = checkAndCover(city,false);

            if (StrUtil.isNotEmpty(s1)) {
                return s1;
            }
        }


        return StrUtil.EMPTY;
    }


    /**
     * 直辖市 随机为区
     * @param city
     * @return
     */
    public static String zxsToQu(String city) {
      return   zxsToQu(city, true);
    }


//    public static void main(String[] args) {
//                System.out.println(AreasCheckUtil.zxsToQu("上海市"));
//          System.out.println(AreasCheckUtil.zxsToQu("黄浦区"));
//        System.out.println(AreasCheckUtil.zxsToQu("上海市-上海市"));
//        System.out.println(AreasCheckUtil.zxsToQu("上海市,上海市"));
//        System.out.println(AreasCheckUtil.zxsToQu(",上海市,上海市"));
//
//
//        System.out.println(AreasCheckUtil.checkAndCover("上海市"));
//        System.out.println(AreasCheckUtil.checkAndCover("黄浦区"));
//        System.out.println(AreasCheckUtil.checkAndCover("上海市-上海市"));
//        System.out.println(AreasCheckUtil.checkAndCover("上海市,上海市"));
//        System.out.println(AreasCheckUtil.checkAndCover(",上海市,上海市"));
//
//        System.out.println("--------------");
//
//        System.out.println(AreasCheckUtil.zxsToQu("广西壮族自治区"));
//        System.out.println(AreasCheckUtil.zxsToQu("2321"));
//        System.out.println(AreasCheckUtil.zxsToQu(""));
//        System.out.println(AreasCheckUtil.zxsToQu(" 上海市 "));
//        System.out.println(AreasCheckUtil.zxsToQu(" ,上海市,上海市 "));
//
//
//        System.out.println(AreasCheckUtil.checkAndCover("广西壮族自治区"));
//        System.out.println(AreasCheckUtil.checkAndCover("2321"));
//        System.out.println(AreasCheckUtil.checkAndCover(""));
//        System.out.println(AreasCheckUtil.checkAndCover(" 上海市 "));
//        System.out.println(AreasCheckUtil.checkAndCover(" ,上海市,上海市 "));
//
//
//    }
}
